#ifndef __RTB_ASSERT_H__
#define __RTB_ASSERT_H__

/*============================ INCLUDES ======================================*/
#include "stdint.h"

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus  */

/*============================ MACROS ========================================*/
/*============================ MACROFIED FUNCTIONS ===========================*/
#define RTB_USING_ASSERT
#ifdef RTB_USING_ASSERT
#define RTB_ASSERT(condition)                                       \
    do                                                              \
    {                                                               \
        if (!(condition))                                           \
        {                                                           \
            rtb_assert_handler(#condition, __FUNCTION__, __LINE__); \
        }                                                           \
    } while (0)
#else
#define RTB_ASSERT(condition)
#endif /* RTB_USING_ASSERT */

/*============================ TYPES =========================================*/
/*============================ GLOBAL VARIABLES ==============================*/
/*============================ PROTOTYPES ====================================*/
extern void (*rtb_assert_hook)(const char *ex, const char *func, uint32_t line);
void rtb_assert_set_hook(void (*hook)(const char *ex, const char *func, uint32_t line));
void rtb_assert_handler(const char *ex, const char *func, uint32_t line);

#ifdef __cplusplus
}
#endif /* __cplusplus  */

#endif /* __RTB_ASSERT_H__ */
